HackTheBox - PC WriteUp - Máquina retirada

under

Encendemos la maquina PC y obtenemos la dirección 10.129.56.82, para confirmar que la maquina esta activa lanzamos una traza ICMP

under

Y vemos que recibimos las 5 trazas enviadas seguido de un TTL de 63, por tanto estamos frente a una maquina Linux

Enumeración

Para la enumeración lanzamos un escaneo con nmap a todo el rango de puertos y exportamos la captura en el formato “G” para pasarlo a la utilidad de extractPorts:

nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 10.129.56.82 -oG allPorts

Una vez con la captura de nmap representado los puertos abiertos hacemos una limpieza del ruido:

under

Usando extractPorts podremos ver la información mas relevante de la captura de nmap:

under

Ahora pasamos a hacer un escaneo exhaustivo y vemos los puertos 22 y 50051 abiertos.

under

Al no saber nada sobre el puerto 50051 haciendo búsquedas en internet encontramos un servicio llamado grpc

under

buscando un poco de información en Github encontramos un repositorio que tiene un herramienta de consola, que a modo de cliente esta inspirada en curl para acceder al servicio grpc. Podremos instalar la herramienta con

go install github.com/fullstorydev/grpcurl/cmd/grpcurl@latest

Con la herramienta instalada podremos ver que argumentos debemos pasarle para poder hacer uso de la API que tenemos expuesta por el puerto 50051

under

Vemos algunos parámetros interesantes como -plaintext, list, describe, etc

under

Y vemos que la maquina tiene un servicio llamado SimpleApp, donde usando “describe” podemos ver los métodos o servicios para la API en este servicio de SimpleApp

Podemos ver que es un servicio y los métodos que tiene. Usando la función “getInfo” tendremos la información de los parámetros que espera cada uno de los métodos

grpcurl -plaintext 10.129.56.82:50051 SimpleApp.getInfo
under

Revisando un poco el manual de la herramienta de grpcurl podemos ver que el parámetro “-d” nos permite agregar parámetros y al saber que hay un método RegisterUser nos registramos en el servicio.

under

Al tratar de traer la información vemos que nos pide un token en header, asi que pasándole los datos con los que nos registramos pero llamando al método LoginUser nos retorna el servicio un ID 707

under

Pero vemos que no es dinámico el ID y cambia después de cada petición:

under

Curiosamente postman permite trabajar con grpc al momento de crear un nuevo proyecto:

under

Desde postman podremos ver directamente los métodos de la API que tenemos expuesta.

under

Intentamos loguearnos con credenciales por defecto como admin:admin y vemos que es posible y que existe este usuario.

under

Pero en el postman vemos que en Metadata se nos ha generado un token

under

Llamando al método getInfo ya podemos utilizar el token y vemos que la respuesta es el id y que la API pronto actualizara la información.

under

Si probamos como Header en la consola con grpcurl vemos la misma información.

under

Al servicio estar almacenando usuarios y contraseñas probamos con una inyección SQL

order by 1-- -

Generando la estructura

{"id": "536 order by 1-- -"}

Pero nos responde con will update soon

under

Seguido me hace pensar en que hay 1 columna valida, por tanto probando la consulta

union select 1-- -

vemos que nos responde con 1

under

Tratamos de listar las version de la base da datos pero obtenemos un error, hasta que después de unas búsquedas en internet del método version() para distintos motores de bases de datos logramos ver información relevante con sqlite_version()

under

Al conocer la version de la base de datos ya solo nos queda probar una inyección:

tbl_name FROM sqlite_master WHERE type=\"table"\
under

Y vemos que la tabla se llama accounts, como siempre en una buena enumeración de base de datos podemos usar group_concat

union select group_concat(username) from accounts limit 1
under

Seguido de saber que los usuarios son (admin y sau) recuperamos sus contraseñas

union select group_concat(password) from accounts limit 1

Y obtenemos (admin y HereIsYourPassword1431).

Probamos a reutilizar credenciales con el servicio expuesto ssh sau:HereIsYourPassword y obtendremos acceso a la maquina.

under

Escalada

Para la escalada vemos que no tenemos permisos o privilegios asignado a nivel de sudoers.

under

Probamos a enumerar por binarios con privilegio SUID

under

Pero no encontramos nada asi que seguimos con la enumeración al sistema

under

Vemos que el directorio /opt tiene una aplicación en python pero enumerando estos archivos no encontramos nada interesante

under

Mirando la información de puertos abiertos internamente en la maquina con netstat -nat vemos el puerto 8000 y el puerto 9666

under

Gracias a que estamos con ssh podemos hacer uso de un Local Port Forwarding

ssh sau@10.129.56.82 -L 8000:127.0.0.1:8000 -L 9666:127.0.0.1:9666
under

De esta forma podemos acceder desde nuestro navegador al puerto 8000

under

Y vemos un panel de autenticación pyLoad. Haciendo uso del commando ps -eo command vemos que alguien en el sistema esta ejecutando /usr/bin/python3 /usr/local/bin/pyload

under

Entonces mirando la información del dueño de este binario vemos que root lo esta ejecutando y que si tratamos de ejecutarlo no podremos hacerlo. Lo que si podemos hacer el leer el contenido del archivo entonces lo revisaremos con cat

under

Mas allá de entender como funciona el código podemos ver que importa una librería llamada pyload, por lo tanto se me ocurre mirar la version y vemos pyload 0.5.0

under

Lo primero a intentar sera un exploit encontrado en exploitdb para pyload 0.5.0, rápidamente para lograr esto nos iremos a /dev/shm el cual es un directorio donde tendremos capacidades rwx.

under

La idea es copiar el script en python haciendo uso de base64 y darle permisos de ejecución en la maquina.

under

y vemos que el exploit funciona porque hemos logrado meter el output de un comando “whoami” en el archivo file en la maquina.

under

siguiendo este principio le asignamos el privilegio SUID a la bash para poder ejecutarla temporalmente como el propietario haciendo uso de “bash -p”

under

Asi habremos completado la maquina PC

under
under